home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / MDIFILE.PAK / MDIFILE.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  7KB  |  247 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // Copyright (c) 1991, 1995 by Borland International, All Rights Reserved
  4. //
  5. //----------------------------------------------------------------------------
  6. #include <owl/pch.h>
  7. #include <owl/applicat.h>
  8. #include <owl/editfile.h>
  9. #include <owl/mdi.h>
  10. #include <owl/decmdifr.h>
  11. #include <owl/statusba.h>
  12. #include <owl/controlb.h>
  13. #include <owl/buttonga.h>
  14. #include <owl/gdiobjec.h>
  15.  
  16. #include "mdifile.h"
  17. #include <owl/editfile.rh>
  18.  
  19. //
  20. //
  21. //
  22. const char AppName[] = "MDI File Editor";
  23.  
  24. const TDecoratedFrame::TLocation Location[] = {
  25.   TDecoratedFrame::Top,
  26.   TDecoratedFrame::Left,
  27.   TDecoratedFrame::Right
  28. };
  29.  
  30. //
  31. //
  32. //
  33. class TMDIFileApp : public TApplication {
  34.   public:
  35.     TMDIFileApp(const char* name) : TApplication(name) {}
  36.     void InitMainWindow();
  37.  
  38.   protected:
  39.     TOpenSaveDialog::TData   FileData;
  40.     TMDIClient*              Client;
  41.     TGadgetWindow::THintMode HintMode;
  42.     TDecoratedFrame*         Frame;
  43.     TControlBar*             ControlBar;
  44.     int                      ControlBarLoc;
  45.  
  46.   protected:
  47.     void CmFileNew();
  48.     void CmFileOpen();
  49.     void CmToggleHint();
  50.     void CeToggleHint(TCommandEnabler&);
  51.     void CmToggleBar();
  52.     void CeTestState(TCommandEnabler&);
  53.  
  54.   DECLARE_RESPONSE_TABLE(TMDIFileApp);
  55.  
  56. };
  57.  
  58. DEFINE_RESPONSE_TABLE1(TMDIFileApp, TApplication)
  59.   EV_COMMAND(CM_FILENEW, CmFileNew),
  60.   EV_COMMAND(CM_FILEOPEN, CmFileOpen),
  61.   EV_COMMAND(CM_TOGGLEHINT, CmToggleHint),
  62.   EV_COMMAND_ENABLE(CM_TOGGLEHINT, CeToggleHint),
  63.   EV_COMMAND(CM_TOGGLEBAR, CmToggleBar),
  64.   EV_COMMAND_ENABLE(CM_TESTSTATE, CeTestState),
  65. END_RESPONSE_TABLE;
  66.  
  67.  
  68. //
  69. //
  70. //
  71. static TControlBar*
  72. BuildControlBar(TWindow* parent, TControlBar::TTileDirection direction)
  73. {
  74.   TControlBar* cb = new TControlBar(parent, direction);
  75.   cb->Insert(*new TButtonGadget(CM_FILENEW, CM_FILENEW));
  76.   cb->Insert(*new TButtonGadget(CM_FILEOPEN, CM_FILEOPEN));
  77.   cb->Insert(*new TButtonGadget(CM_FILESAVE, CM_FILESAVE));
  78.   cb->Insert(*new TButtonGadget(CM_FILESAVEAS, CM_FILESAVEAS));
  79.  
  80.   cb->Insert(*new TSeparatorGadget);
  81.   cb->Insert(*new TButtonGadget(CM_EDITUNDO, CM_EDITUNDO));
  82.   cb->Insert(*new TButtonGadget(CM_EDITCUT, CM_EDITCUT));
  83.   cb->Insert(*new TButtonGadget(CM_EDITCOPY, CM_EDITCOPY));
  84.   cb->Insert(*new TButtonGadget(CM_EDITPASTE, CM_EDITPASTE));
  85.  
  86.   cb->Insert(*new TSeparatorGadget);
  87.   cb->Insert(*new TButtonGadget(CM_EDITFIND, CM_EDITFIND));
  88.   cb->Insert(*new TButtonGadget(CM_EDITREPLACE, CM_EDITREPLACE));
  89.   cb->Insert(*new TButtonGadget(CM_EDITFINDNEXT, CM_EDITFINDNEXT));
  90.  
  91.   cb->Insert(*new TSeparatorGadget);
  92.   cb->Insert(*new TButtonGadget(CM_TOGGLEHINT, CM_TOGGLEHINT,
  93.                                 TButtonGadget::NonExclusive));
  94.   cb->Insert(*new TSeparatorGadget);
  95.   cb->Insert(*new TButtonGadget(CM_TOGGLEBAR, CM_TOGGLEBAR));
  96.   cb->Insert(*new TSeparatorGadget);
  97.   cb->Insert(*new TButtonGadget(CM_TESTSTATE, CM_TESTSTATE));
  98.  
  99.   cb->Attr.Style |= WS_CLIPSIBLINGS;    // since toolbar may move around
  100.   cb->Attr.Id = IDW_TOOLBAR;            // From MDIFILE.H, so we can hide it
  101.  
  102.   return cb;
  103. }
  104.  
  105. //
  106. // Construct the TMDIFileApp's MainWindow of class TMDIFileWindow,
  107. // loading its menu, accelerator table & icon
  108. //
  109. void
  110. TMDIFileApp::InitMainWindow()
  111. {
  112.   Client = new TMDIClient;
  113.   Frame = new TDecoratedMDIFrame(Name, IDM_EDITFILE_DOC, *Client, true);
  114.   MainWindow = Frame;
  115.  
  116.   Frame->Attr.AccelTable = IDA_MDIFILE;
  117.   Frame->SetMenuDescr(TMenuDescr(IDM_EDITFILE_DOC, 1, 0, 0, 1, 1, 0));
  118.   Frame->SetIcon(this, IDI_MULTIFILE);
  119.  
  120.   // Construct, build and insert a control bar into the frame. Start out at
  121.   // the top of the frame
  122.   //
  123.   HintMode = TGadgetWindow::PressHints;
  124.   ControlBar = BuildControlBar(Frame, TControlBar::Horizontal);
  125.   ControlBarLoc = 0;
  126.   Frame->Insert(*ControlBar, Location[ControlBarLoc]);
  127.  
  128.   // Construct a status bar & insert it at the bottom
  129.   //
  130.   TStatusBar* sb = new TStatusBar(0, TGadget::Recessed,
  131.            TStatusBar::CapsLock | TStatusBar::NumLock |
  132.            TStatusBar::Overtype | TStatusBar::SizeGrip);
  133.  
  134.   Frame->Insert(*sb, TDecoratedFrame::Bottom);
  135.  
  136.   EnableCtl3d(true);
  137.  
  138.   // Initialize the file data struct used for open and saveas
  139.   //
  140.   FileData.Flags = OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT;
  141.   FileData.SetFilter(string(*this, IDS_FILEFILTER).c_str());
  142. }
  143.  
  144. //
  145. // Respond to "New" command by constructing, creating, and setting up a
  146. // new TFileWindow MDI child
  147. //
  148. void
  149. TMDIFileApp::CmFileNew()
  150. {
  151.   TMDIChild* child = new TMDIChild(*Client, "", new TEditFile(0, 0, 0));
  152.   child->SetMenuDescr(TMenuDescr(IDM_EDITFILE_CHILD, 0, 2, 0, 0, 0, 0));
  153.   child->SetIcon(this, IDI_DOC);
  154.  
  155.   TMDIChild* curChild = Client->GetActiveMDIChild();
  156.   if (curChild && (curChild->GetWindowLong(GWL_STYLE) & WS_MAXIMIZE))
  157.     child->Attr.Style |= WS_MAXIMIZE;
  158.  
  159.   child->Create();
  160. }
  161.  
  162. //
  163. // Respond to "Open" command by constructing, creating, and setting up a
  164. // new TFileWindow MDI child
  165. //
  166. void
  167. TMDIFileApp::CmFileOpen()
  168. {
  169.   *FileData.FileName = 0;
  170.   if (TFileOpenDialog(MainWindow, FileData).Execute() == IDOK) {
  171.     TMDIChild* child = new TMDIChild(*Client, "", new TEditFile(0, 0, 0, 0, 0, 0, 0, FileData.FileName));
  172.     child->SetMenuDescr(TMenuDescr(IDM_EDITFILE_CHILD, 0, 2, 0, 0, 0, 0));
  173.     child->SetIcon(this, IDI_DOC);
  174.  
  175.     TMDIChild* curChild = Client->GetActiveMDIChild();
  176.     if (curChild && (curChild->GetWindowLong(GWL_STYLE) & WS_MAXIMIZE))
  177.       child->Attr.Style |= WS_MAXIMIZE;
  178.  
  179.     child->Create();
  180.   }
  181. }
  182.  
  183. //
  184. //
  185. //
  186. void
  187. DoCreateChild(TWindow* win, void*)
  188. {
  189.   if (win->IsFlagSet(wfAutoCreate))
  190.     win->Create();
  191. }
  192.  
  193. //
  194. //
  195. //
  196. void
  197. TMDIFileApp::CeToggleHint(TCommandEnabler& ce)
  198. {
  199.   ce.SetCheck(HintMode == TGadgetWindow::EnterHints);
  200. }
  201.  
  202. //
  203. //
  204. //
  205. void
  206. TMDIFileApp::CmToggleHint()
  207. {
  208.   HintMode = HintMode==TGadgetWindow::PressHints ?
  209.                TGadgetWindow::EnterHints :
  210.                TGadgetWindow::PressHints;
  211.  
  212.   ControlBar->SetHintMode(HintMode);
  213.   ControlBar->SetHintCommand(-1);  // make sure we don't leave hint text dangling
  214. }
  215.  
  216. //
  217. //
  218. //
  219. void
  220. TMDIFileApp::CmToggleBar()
  221. {
  222.   ControlBarLoc = (ControlBarLoc+1) % COUNTOF(Location);
  223.   ControlBar->SetDirection(ControlBarLoc==0 ?
  224.                            TControlBar::Horizontal : TControlBar::Vertical);
  225.   Frame->Insert(*ControlBar, Location[ControlBarLoc]);
  226.   Frame->Layout();
  227. }
  228.  
  229. //
  230. //
  231. //
  232. void
  233. TMDIFileApp::CeTestState(TCommandEnabler& ce)
  234. {
  235.   ce.Enable();
  236.   ce.SetCheck(TCommandEnabler::Indeterminate);
  237. }
  238.  
  239. //
  240. //
  241. //
  242. int
  243. OwlMain(int /*argc*/, char* /*argv*/ [])
  244. {
  245.   return TMDIFileApp(AppName).Run();
  246. }
  247.